Python3 命令行参数解析

您所在的位置:网站首页 python3 命令行 Python3 命令行参数解析

Python3 命令行参数解析

2024-01-04 19:07| 来源: 网络整理| 查看: 265

Contents

1 sys.argv用法2 argparse 模块用法2.1 理解 add_argument() 方法2.2 argparse示例3 参考资料

sys.argv,这种方法比较古老,灵活性很差,同时解析出来的参数都是 str 类型。但在编写简单脚本,参数较少且固定时比较方便。argparse 模块是 Python 标准库中推荐的命令行解析模块,命令行参数解析在 windows 系统下不适用,但在 linux 系统下几乎要总是考虑命令行参数解析。

sys.argv用法sys.argv[] 获取的是命令行参数列表,sys.argv[0] 表示代码本身文件路径,所以命令行参数从sys.argv[1] 开始。len(sys.argv) 获取的 是命令行参数个数。

新建 demo.py,并输入以下 代码:

# -*-coding-*-: utf-8 import sys a=sys.argv[0] # sys.argv[0]永远表示的是你运行的程序文件名 b=sys.argv[1] c=sys.argv[2] print("filename:",a) print("param1:",b) print("param2:",c)

终端中运行:python demo.py honggao zhang。输出如下:

(‘filename:’, ‘demo.py’)  (‘param1:’, ‘honggao’)  (‘param2:’, ‘zhang’)

argparse 模块用法

在模型训练程序中,我们经常要配置命令参数,这里可用到 argparse 模块,它是 Python 内置的一个用于命令选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。 使用 argparse 模块解析命令行参数,主要分三个步骤:创建解析器、添加参数、解析参数,步骤如下:

创建 ArgumentParser() 对象 调用 add_argument() 方法添加参数:定位参数、可选参数和混合使用参数 使用 parse_args() 解析添加参数理解 add_argument() 方法

add_argument() 方法定义了如何解析命令行参数: 

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])name or flags – 选项字符串的名字或者列表,例如 foo 或者 -f, –foo。action – 命令行遇到参数时的动作,默认值是 store。store_const,表示赋值为 const 的相反值,比如 store_true,代表参数赋值为 false;append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;append_const,将参数规范中定义的一个值保存到一个列表;count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;nargs – 应该读取的命令行参数个数,可以是具体的数字,或者是 ? 号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。const – action 和 nargs 所需要的常量值。default – 不指定参数时的默认值。type – 命令行参数应该被转换成的类型。choices – 参数可允许的值的一个容器。required – 可选参数是否可以省略 (仅针对可选参数)。help – 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.metavar – 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.dest – 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.argparse示例

示例 1 代码如下:

import argparse if __name__ == "__main__": parser = argparse.ArgumentParser(description="annotated data set for aligned") parser.add_argument('-r1', '--src-data-root', dest='data_root1', default='/mnt/dms_data/Data_All/custom_alarm_smokeall_20190505/json/v20190610', type=str, metavar='STRING', help='src data path') parser.add_argument('-r2', '--dst-data-root', dest='data_root2', default='/mnt/dms_data/Data_All/custom_alarm_smokeall_20190505/json/v20190505', type=str, metavar='STRING', help='tag data path') args = parser.parse_args() data_root1 = args.data_root1 data_root2 = args.data_root2 print('data_root1 path is %s' % data_root1) # data_root1 path is /mnt/dms_data/Data_All/custom_alarm_smokeall_20190505/json/v20190610

输出如下:

data_root1 path is /mnt/dms_data/Data_All/custom_alarm_smokeall_20190505/json/v20190610

新建 foler_size.py,实现计算指定目录的大小,并输入以下代码。

# Description : This will scan the current directory and all subdirectories and display the size. import os import sys # Load the library module and the sys module for the argument vector''' import argparse # try: # directory = sys.argv[1] # Set the variable directory to be the argument supplied by user. # except IndexError: # sys.exit("Must provide an argument.") class directory def get_folder_size(folder_path): dir_size = 0 # Set the size to 0 fsizedicr = {'Bytes': 1, 'Kilobytes': float(1) / 1024, 'Megabytes': float(1) / (1024 * 1024), 'Gigabytes': float(1) / (1024 * 1024 * 1024)} # Walk through all the directories. For each iteration, os.walk returns the folders, subfolders and files in the dir. for (path, dirs, files) in os.walk(folder_path): for file in files: # Get all the files filename = os.path.join(path, file) dir_size += os.path.getsize(filename) # Add the size of each file in the root dir to get the total size. fsizeList = [str(round(fsizedicr[key] * dir_size, 2)) + " " + key for key in fsizedicr] # List of units if dir_size == 0: print("File Empty") # Sanity check to eliminate corner-case of empty file. else: for units in sorted(fsizeList)[::-1]: # Reverse sort list of units so smallest magnitude units print first. print("Folder Size: " + units) if __name__ == "__main__": parser = argparse.ArgumentParser(description='This will scan the current directory and all subdirectories and display the size.') parser.add_argument('--folder_path', type=str, default="C:\\Users\\zhanghonggao\\Documents\\image_utils", help='the path of folder,') args = parser.parse_args() get_folder_size(args.folder_path)

终端中运行:

python folder_size.py --folder_path "C:\Users\zhanghonggao\Documents\image_utils"。

输出如下:

Folder Size: 43652259 Bytes Folder Size: 42629.16 Kilobytes Folder Size: 41.63 Megabytes Folder Size: 0.04 Gigabytes

参考资料

My Python Examples



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3